/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.aaron.platform.service;

import com.aaron.platform.dao.PageInfo;
import com.aaron.platform.entity.GczxOrderInfo;
import com.aaron.platform.exceptions.PayInfoExistException;
import java.util.List;
import java.util.Properties;

/**
 * interface of order
 * @author chenzhuohua
 */
public interface IOrderMgr {

    /**
     * 通过ID找订单
     * @param orderId 订单ID
     * @return 订单信息
     */
    public GczxOrderInfo findById(Integer orderId);

    /**
     * 通过订单编号找订单
     * @param oderCode 订单编号
     * @return 订单信息
     */
    public List<GczxOrderInfo> findByCode(String oderCode);

    /**
     * 通过合同编号找订单
     * @param contactCode 合同编号
     * @return 订单列表
     */
    public List<GczxOrderInfo> findByContactCode(String contactCode);

    /**
     * 条件查询
     * @param condition
     * @param pageInfo
     * @return
     */
    public PageInfo findByCondition(Properties condition, int startIndex, int pageSize);

    /**
     * 条件查询
     * @param condition
     * @return
     */
    public List<GczxOrderInfo> findByCondition(Properties condition);
    
    /**
     * 添加订单信息
     * @param gczxOrderInfo 订单信息
     */
    public void addOrderInfo(GczxOrderInfo gczxOrderInfo);

    /**
     * 修改订单信息
     * @param gczxOrderInfo 订单信息
     */
    public void updateOrderInfo(GczxOrderInfo gczxOrderInfo);

    /**
     *
     * @param gczxOrderInfo
     */
    public void mergeOrderInfo(GczxOrderInfo gczxOrderInfo);

    /**
     * 添加或更新订单信息
     * @param gczxOrderInfos 订单信息列表
     */
    public void addOrUpdateOrderInfos(List<GczxOrderInfo> gczxOrderInfos);

    /**
     * 删除订单
     * @param orderId 订单ID
     * @throws PayInfoExistException 付款信息已存在
     */
    public void removeOrderInfo(Integer orderId) throws PayInfoExistException;

    /**
     * 删除订单
     * @param orderId 订单信息
     * @throws PayInfoExistException 付款信息已存在
     */
    public void removeOrderInfo(GczxOrderInfo gczxOrderInfo) throws PayInfoExistException;

    /**
     * 是否存在重复订单
     * @param gczxOrderInfo 判断系统中是否已有类似订单
     * @return
     */
    public boolean isSameOrderExist(GczxOrderInfo gczxOrderInfo);
}
